from math import pi


class Cirle:
    def __init__(self, r):
        self.r = r

    @property  # 调用时可以不加()括号， # 把一个方法伪装成一个属性,在调用这个方法的时候不需要加()就可以直接得到返回值
    def area(self):
        return pi * self.r ** 2


c1 = Cirle(10)
print(c1.r)
print(c1.area)
# 变量的属性和方法?
# 属性 :圆形的半径\圆形的面积
# 方法 :登录  注册

import time


class Persom:
    def __init__(self, name, birth):
        self.name = name
        self.birth = birth

    @property
    def age(self):  # 装饰的这个方法 不能有参数
        return time.localtime().tm_year - self.birth


alex = Persom('太白', 1998)
print(alex.age)


# property的第二个应用场景
class User:
    def __init__(self, user, pwd):
        self.user = user
        self.__pwd = pwd

    @property  # 伪装成属性,不能从外界改
    def pwd(self):
        return self.__pwd


alex = User('alex', 'sbsbsb')
print(alex.pwd)


class Goods:
    discount = 0.8

    def __init__(self, name, origin_price):
        self.name = name
        self.__price = origin_price

    @property
    def price(self):
        return self.__price * self.discount


apple = Goods('apple', 5)
print(apple.price)
